use std::io::{fs, UserRWX};
use std::collections::HashSet;
+use semver::Version;
use core::{Package, PackageId, PackageSet, Target, Resolve};
use util;
// be building a C lib for a plugin
let layout = cx.layout(false);
let output = layout.native(pkg);
- let mut p = util::process(cmd.next().unwrap())
- .cwd(pkg.get_root())
+ let mut p = process(cmd.next().unwrap(), pkg)
.env("OUT_DIR", Some(&output))
.env("DEPS_DIR", Some(&output))
.env("TARGET", cx.config.target());
fn prepare_rustc(package: &Package, target: &Target, crate_types: Vec<&str>,
cx: &Context, req: PlatformRequirement) -> Vec<ProcessBuilder> {
- let root = package.get_root();
-
- let base = util::process("rustc").cwd(root.clone());
+ let base = process("rustc", package);
let base = build_base_args(base, target, crate_types.as_slice());
let target_cmd = build_plugin_args(base.clone(), cx, false);
}
}
}
+
+pub fn process<T: ToCStr>(cmd: T, pkg: &Package) -> ProcessBuilder {
+ util::process(cmd)
+ .cwd(pkg.get_root())
+ .env("CARGO_PKG_VERSION_MAJOR", Some(pkg.get_version().major.to_string()))
+ .env("CARGO_PKG_VERSION_MINOR", Some(pkg.get_version().minor.to_string()))
+ .env("CARGO_PKG_VERSION_PATCH", Some(pkg.get_version().patch.to_string()))
+ .env("CARGO_PKG_VERSION_PRE", pre_version_component(pkg.get_version()))
+}
+
+fn pre_version_component(v: &Version) -> Option<String> {
+ if v.pre.is_empty() {
+ return None;
+ }
+
+ let mut ret = String::new();
+
+ for (i, x) in v.pre.iter().enumerate() {
+ if i != 0 { ret.push_char('.') };
+ ret.push_str(x.to_string().as_slice());
+ }
+
+ Some(ret)
+}
assert_that(p.cargo_process("cargo-build"), execs().with_status(0));
})
+test!(crate_version_env_vars {
+ let p = project("foo")
+ .file("Cargo.toml", r#"
+ [project]
+
+ name = "foo"
+ version = "0.5.1-alpha.1"
+ authors = ["wycats@example.com"]
+
+ [[bin]]
+ name = "foo"
+ "#)
+ .file("src/foo.rs", r#"
+ use std::os;
+
+ static VERSION_MAJOR: &'static str = env!("CARGO_PKG_VERSION_MAJOR");
+ static VERSION_MINOR: &'static str = env!("CARGO_PKG_VERSION_MINOR");
+ static VERSION_PATCH: &'static str = env!("CARGO_PKG_VERSION_PATCH");
+ static VERSION_PRE: &'static str = env!("CARGO_PKG_VERSION_PRE");
+
+ fn main() {
+ println!("{}-{}-{} @ {}",
+ VERSION_MAJOR,
+ VERSION_MINOR,
+ VERSION_PATCH,
+ VERSION_PRE);
+ }
+ "#);
+
+ assert_that(p.cargo_process("cargo-build"), execs().with_status(0));
+
+ assert_that(
+ process(p.bin("foo")),
+ execs().with_stdout("0-5-1 @ alpha.1\n"));
+})
+
test!(custom_build_in_dependency {
let mut p = project("foo");
let bar = p.root().join("bar");